import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
/* 配置 element plus 自动按需引入 */
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import {ElementPlusResolver} from 'unplugin-vue-components/resolvers'
/* dts 生成 dts 文件 */
import dts from 'vite-plugin-dts'

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        vue(),
        dts({
            outDir: ['es', 'lib'], // 导出的 dts 文件到的目录
            // 哪些文件要生成 dts 文件
            include: ['packages/**/*.ts', 'packages/**/*.tsx']
        }),
        /* 配置 element plus 自动按需引入 */
        AutoImport({
            resolvers: [ElementPlusResolver()],
        }),
        Components({
            resolvers: [ElementPlusResolver()],
        }),
    ],
    resolve: {
        alias: {
            // 配置 src 目录的别名 @
            "@": path.resolve(__dirname, './src'),
            "@/": path.resolve(__dirname, './src/'),
        }
    },
    // 构建配置
    build: {
        outDir: "xwb-ui", // 打包后输出目录名称
        // 打包为库的配置
        lib: {
            // 打包为库的入口文件
            entry: path.resolve(__dirname, "./packages/index.ts"),
            // name: 'xwb-ui',
            // fileName: "index",
            // 打包的格式
            formats: ['es', 'cjs']
        },
        // rollup打包配置
        rollupOptions: {
            //指定组件编译入口文件
            input: ['packages/index.ts'],
            // 确保外部化处理那些你不想打包进库的依赖
            external: [
                'vue',
                "@vueuse/components",
                "@vueuse/core",
                "element-plus",
                "axios",
                "vue-router",
                // "@element-plus/icons-vue"
            ],
            // 打包输出配置
            output: [
                // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
                // globals: {
                //     vue: 'Vue',
                // },
                // 输出为 esm 配置
                {
                    format: 'es', // 输出格式
                    dir: 'es', // 输出目录
                    entryFileNames: '[name].js', // 输出后入口文件名
                    preserveModules: true, // 按照原来的包结构打包输出
                    preserveModulesRoot: 'packages' // 打包开始根目录
                },
                // 输出为 cjs 配置
                {
                    format: 'cjs',
                    dir: 'lib',
                    entryFileNames: '[name].js',
                    preserveModules: true,
                    preserveModulesRoot: 'packages',
                    // cjs 导出时，需要给名
                    // Use `output.exports: "named"` to disable this warning.
                    exports: 'named' // 关闭 cjs 警告
                }
            ]
        },
    },
})
